# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Nicolas Lorin <androw95220@gmail.com>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=mimalloc1
_projname=mimalloc
pkgver=1.7.6
pkgrel=1
_pkgdesc="A compact general purpose allocator with excellent performance"
pkgdesc="$_pkgdesc (in secure mode)"
url="https://github.com/microsoft/mimalloc"
# ppc64le: tests segfault in secure mode
arch="all !ppc64le"
license="MIT"
makedepends="cmake samurai"
provides="mimalloc=$pkgver-r$pkgrel"
provider_priority=100  # highest
subpackages="$pkgname-dev $pkgname-insecure $pkgname-debug"
source="https://github.com/microsoft/mimalloc/archive/v$pkgver/$_projname-$pkgver.tar.gz
	cmake-add-insecure-suffix.patch
	"
builddir="$srcdir/$_projname-$pkgver"

_buildtypes='debug insecure secure'

build() {
	# https://github.com/microsoft/mimalloc/issues/597
	export CFLAGS="$CFLAGS -D__USE_ISOC11"
	_build out/debug -DCMAKE_BUILD_TYPE=Debug -DMI_DEBUG_FULL=ON

	# This is called "release" build by upstream.
	_build out/insecure -DCMAKE_BUILD_TYPE=Release -DMI_SECURE=OFF

	_build out/secure -DCMAKE_BUILD_TYPE=Release -DMI_SECURE=ON
}

_build() {
	local outdir="$1"; shift

	local crossopts=
	[ "$CBUILD" = "$CHOST" ] \
		|| crossopts='-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux'

	CFLAGS=${CFLAGS/-Os/} cmake -B "$outdir" -G Ninja \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_VERBOSE_MAKEFILE=ON \
		-DMI_INSTALL_TOPLEVEL=ON \
		$crossopts \
		"$@" .
	cmake --build "$outdir"
}

check() {
	local btype; for btype in $_buildtypes; do
		msg "Testing $btype build"

		cd "$builddir"/out/$btype
		CTEST_OUTPUT_ON_FAILURE=TRUE ctest --timeout 300
	done
}

package() {
	local btype; for btype in $_buildtypes; do
		DESTDIR="$pkgdir" cmake --install out/$btype
	done

	cd "$pkgdir"
	ln -s libmimalloc-secure.so usr/lib/libmimalloc.so
	ln -s libmimalloc-secure.so.${pkgver%.*} usr/lib/libmimalloc.so.${pkgver%.*}
	ln -s libmimalloc-secure.a usr/lib/libmimalloc.a

	sed 's/-secure/-insecure/g' usr/lib/cmake/mimalloc/mimalloc-release.cmake \
		> usr/lib/cmake/mimalloc/mimalloc-insecure.cmake
	mv usr/lib/cmake/mimalloc/mimalloc-release.cmake usr/lib/cmake/mimalloc/mimalloc-secure.cmake
	ln -s mimalloc-secure.cmake usr/lib/cmake/mimalloc/mimalloc-release.cmake

	rm -f usr/lib/*.o
}

insecure() {
	pkgdesc="$_pkgdesc (in insecure mode)"

	amove usr/lib/libmimalloc-insecure.*
}

debug() {
	pkgdesc="$_pkgdesc (debug build)"
	options="!strip"

	amove usr/lib/libmimalloc-debug.*
}

sha512sums="
dc0c072b08a68409937062600aec0a1b67933334e050ff80f6396d2d2c33a4c7515beb1709a86d51c24a3d5a2c27565ff87401e154cb8cb3937a647ee91e2c31  mimalloc-1.7.6.tar.gz
d34954ac0b18d8a3baa1fcb056eec887c5919b0b8c41e7a338a6be315e2685277a9511b86ed799c83bd8a0aa2fa6127239fef261836ae8c4e30f48c17a2c411f  cmake-add-insecure-suffix.patch
"
